package itheima.zuoye.Test4;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class test {
    private static final int KEY = 0x55; // 加密密钥

    /**
     * 文件加密
     * @param sourceFilePath 源文件路径
     * @param targetFilePath 目标文件路径
     */
    public static void encrypt(String sourceFilePath, String targetFilePath) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            // 获取源文件和目标文件的输入输出流
            inputStream = FileUtil.getInputStream(sourceFilePath);
            outputStream = FileUtil.getOutputStream(targetFilePath);

            byte[] bytes = new byte[1024];
            int len;
            while ((len = inputStream.read(bytes)) != -1) {
                // 对读取的每个字节进行加密处理
                for (int i = 0; i < len; i++) {
                    bytes[i] = (byte) (bytes[i] ^ KEY);
                }
                // 将加密后的字节写入目标文件
                outputStream.write(bytes, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            IoUtil.close(inputStream);
            IoUtil.close(outputStream);
        }
    }

    /**
     * 文件解密
     * @param sourceFilePath 源文件路径
     * @param targetFilePath 目标文件路径
     */
    public static void decrypt(String sourceFilePath, String targetFilePath) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            // 获取源文件和目标文件的输入输出流
            inputStream = FileUtil.getInputStream(sourceFilePath);
            outputStream = FileUtil.getOutputStream(targetFilePath);

            byte[] bytes = new byte[1024];
            int len;
            while ((len = inputStream.read(bytes)) != -1) {
                // 对读取的每个字节进行解密处理
                for (int i = 0; i < len; i++) {
                    bytes[i] = (byte) (bytes[i] ^ KEY);
                }
                // 将解密后的字节写入目标文件
                outputStream.write(bytes, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            IoUtil.close(inputStream);
            IoUtil.close(outputStream);
        }
    }
    public static void main(String[] args) {
        String sourceFile = "D:\\javabasepro\\java AdvanceProject\\day10\\src\\itheima\\zuoye\\Test4\\aikun"; // 源文件路径
        String encryptedFile = "D:\\javabasepro\\java AdvanceProject\\day10\\src\\itheima\\zuoye\\Test4\\ik"; // 加密后文件路径
        String decryptedFile = "D:\\javabasepro\\java AdvanceProject\\day10\\src\\itheima\\zuoye\\Test4\\ikk"; // 解密后文件路径

        // 加密文件
        encrypt(sourceFile, encryptedFile);
        System.out.println("文件加密完成.");

        // 解密文件
        decrypt(encryptedFile, decryptedFile);
        System.out.println("文件解密完成.");

    }
}
